// 构造
var myMammal = {
    name: 'Herb the Mammal',
    get_name: function () {
        return this.name;
    },
    says: function () {
        return this.saying || '';
    }
};

// 定制新的实例
// 这是一种“差异化继承（differential inheritance）”。通过定制一个新的对象，我们指明它与所基于的基本对象的区别。
var myCat = Object.create(myMammal);
myCat.name = 'Henrietta';
myCat.saying = 'meow';
myCat.purr = function (n) {
    var i, s = '';
    for (i = 0; i < n;i += 1) {
        if (s) {
            s += '-';
        }
        s += 'r';
    }
    return s;
};
myCat.get_name = function () {
    return this.says + ' ' + this.name + ' ' + this.says;
};

var block = function () {
    // 记住当前的作用域。构造一个包含了当前作用域中所有对象的新作用域。
    var oldScope = scope;
    scope = Object.create(scope);

    // 传递左花括号作为参数调用 advance
    advance('{');
    
    // 使用新的作用域进行解析
    parse(scope);

    // 传递右花括号作为参数调用 advance 并抛弃新作用域，恢复原来老的作用域。
    advance('}');
    scope = oldScope;
};